💰 API de Sistema Financeiro - Documentação Completa
📋 Visão Geral
O Sistema Financeiro do CordenaAi é responsável pela gestão completa de produtos, cobranças, pagamentos e extratos financeiros. Permite vincular produtos a diferentes entidades de cobrança, gerenciar débitos e créditos, e manter um histórico completo de transações financeiras dos usuários.
🎯 Funcionalidades Principais
- Gestão de Produtos: Catálogo de produtos e serviços disponíveis para cobrança
- Gestão de Cobranças: Entidades que receberão os pagamentos (contas PIX, dados bancários)
- Vínculos Produto-Cobrança: Relacionamento flexível N:N entre produtos e cobranças
- Geração de Cobranças: Criação automática de débitos para usuários
- Registro de Pagamentos: Controle de créditos e quitação de débitos
- Extrato Financeiro: Histórico completo de movimentações
- Fatura Mensal: Consolidação de cobranças e pagamentos por período
🎯 Endpoints Disponíveis
📦 1. PRODUTOS - Gestão de Produtos/Serviços
1.1. GET /api/produtos
Listar Todos os Produtos
- Descrição: Retorna lista completa de todos os produtos cadastrados no sistema
- Método: GET
- Autenticação: Requerida (JWT Bearer Token)
- Parâmetros: Nenhum
- Resposta: Array de objetos Produto
- Uso: Dashboards, listagens administrativas, seleção de produtos
1.2. GET /api/produtos/ativos
Listar Apenas Produtos Ativos
- Descrição: Retorna apenas produtos com status ativo
- Método: GET
- Autenticação: Requerida (JWT Bearer Token)
- Parâmetros: Nenhum
- Resposta: Array de objetos Produto ativos
- Uso: Seleção de produtos para vínculo ou cobrança
1.3. GET /api/produtos/{id}
Obter Produto por ID
- Descrição: Retorna os dados completos de um produto específico
- Método: GET
- Autenticação: Requerida (JWT Bearer Token)
- Parâmetros:
id (path): ID único do produto
- Resposta: Objeto Produto completo
- Uso: Visualização de detalhes, edição
1.4. POST /api/produtos
Criar Novo Produto
- Descrição: Cria um novo produto no sistema
- Método: POST
- Autenticação: Requerida (JWT Bearer Token)
- Body: Objeto CriarProdutoRequest
- Resposta: Objeto Produto criado (201 Created)
- Uso: Formulários de cadastro de novos produtos
1.5. PUT /api/produtos/{id}
Atualizar Produto
- Descrição: Atualiza os dados de um produto existente
- Método: PUT
- Autenticação: Requerida (JWT Bearer Token)
- Parâmetros:
id (path): ID único do produto
- Body: Objeto AtualizarProdutoRequest
- Resposta: Objeto Produto atualizado
- Uso: Formulários de edição de produtos
1.6. DELETE /api/produtos/{id}
Excluir Produto (Soft Delete)
- Descrição: Inativa um produto no sistema (não exclui fisicamente)
- Método: DELETE
- Autenticação: Requerida (JWT Bearer Token)
- Parâmetros:
id (path): ID único do produto
- Resposta: Confirmação de exclusão
- Uso: Remoção de produtos sem perda de histórico
💳 2. COBRANÇAS - Gestão de Entidades de Cobrança
2.1. GET /api/cobrancas
Listar Todas as Cobranças
- Descrição: Retorna lista completa de todas as entidades de cobrança
- Método: GET
- Autenticação: Requerida (JWT Bearer Token)
- Parâmetros: Nenhum
- Resposta: Array de objetos Cobrança
- Uso: Listagens administrativas, seleção de contas
2.2. GET /api/cobrancas/ativas
Listar Apenas Cobranças Ativas
- Descrição: Retorna apenas cobranças com status ativo
- Método: GET
- Autenticação: Requerida (JWT Bearer Token)
- Parâmetros: Nenhum
- Resposta: Array de objetos Cobrança ativas
- Uso: Seleção de contas para recebimento
2.3. GET /api/cobrancas/{id}
Obter Cobrança por ID
- Descrição: Retorna os dados completos de uma cobrança específica
- Método: GET
- Autenticação: Requerida (JWT Bearer Token)
- Parâmetros:
id (path): ID único da cobrança
- Resposta: Objeto Cobrança completo
- Uso: Visualização de dados bancários, edição
2.4. POST /api/cobrancas
Criar Nova Cobrança
- Descrição: Cadastra uma nova entidade de cobrança (conta PIX, dados bancários)
- Método: POST
- Autenticação: Requerida (JWT Bearer Token)
- Body: Objeto CriarCobrancaRequest
- Resposta: Objeto Cobrança criado (201 Created)
- Uso: Cadastro de contas para recebimento
2.5. PUT /api/cobrancas/{id}
Atualizar Cobrança
- Descrição: Atualiza os dados de uma cobrança existente
- Método: PUT
- Autenticação: Requerida (JWT Bearer Token)
- Parâmetros:
id (path): ID único da cobrança
- Body: Objeto AtualizarCobrancaRequest
- Resposta: Objeto Cobrança atualizado
- Uso: Atualização de dados bancários, chave PIX
2.6. DELETE /api/cobrancas/{id}
Excluir Cobrança (Soft Delete)
- Descrição: Inativa uma cobrança no sistema
- Método: DELETE
- Autenticação: Requerida (JWT Bearer Token)
- Parâmetros:
id (path): ID único da cobrança
- Resposta: Confirmação de exclusão
- Uso: Remoção de contas inativas
🔗 3. PRODUTO-COBRANÇA - Gestão de Vínculos
3.1. GET /api/produto-cobranca
Listar Todos os Vínculos
- Descrição: Retorna todos os vínculos entre produtos e cobranças
- Método: GET
- Autenticação: Requerida (JWT Bearer Token)
- Parâmetros: Nenhum
- Resposta: Array de objetos ProdutoCobrança
- Uso: Visualização geral de relacionamentos
3.2. GET /api/produto-cobranca/produto/{idProduto}
Listar Vínculos por Produto
- Descrição: Retorna todas as cobranças vinculadas a um produto específico
- Método: GET
- Autenticação: Requerida (JWT Bearer Token)
- Parâmetros:
idProduto (path): ID do produto
- Resposta: Array de vínculos do produto
- Uso: Visualizar para onde vão os pagamentos de um produto
3.3. GET /api/produto-cobranca/cobranca/{idCobranca}
Listar Vínculos por Cobrança
- Descrição: Retorna todos os produtos vinculados a uma cobrança específica
- Método: GET
- Autenticação: Requerida (JWT Bearer Token)
- Parâmetros:
idCobranca (path): ID da cobrança
- Resposta: Array de vínculos da cobrança
- Uso: Visualizar quais produtos uma conta recebe
3.4. POST /api/produto-cobranca
Criar Vínculo Produto-Cobrança
- Descrição: Vincula um produto a uma cobrança (relacionamento N:N)
- Método: POST
- Autenticação: Requerida (JWT Bearer Token)
- Body: Objeto VincularProdutoCobrancaRequest
- Resposta: Objeto ProdutoCobrança criado (201 Created)
- Validações:
- Produto deve existir e estar ativo
- Cobrança deve existir e estar ativa
- Vínculo não pode ser duplicado
- Uso: Configurar destino de recebimentos
- Nota: Endpoint simplificado - removido o sufixo "/vincular"
3.5. DELETE /api/produto-cobranca/{id}
Remover Vínculo
- Descrição: Remove o vínculo entre produto e cobrança
- Método: DELETE
- Autenticação: Requerida (JWT Bearer Token)
- Parâmetros:
- Resposta: Confirmação de remoção
- Uso: Desfazer relacionamentos
📊 4. EXTRATO - Gestão de Movimentações Financeiras
4.1. POST /api/extrato/gerar-cobranca
Gerar Cobrança (Débito)
- Descrição: Cria um débito (+) no extrato do usuário com valor e descrição automáticos do produto
- Método: POST
- Autenticação: Requerida (JWT Bearer Token)
- Body: Objeto GerarCobrancaRequest (informar vínculo produto-cobrança; valor e descrição automáticos)
- Resposta: Objeto Extrato criado (201 Created)
- Validações:
- Vínculo produto-cobrança deve existir e estar ativo
- Produto vinculado deve existir e estar ativo
- Cobrança vinculada deve existir e estar ativa
- UserId é obrigatório
- Uso: Geração mensal de mensalidades, cobranças avulsas
- Importante:
- Cria movimentação tipo Débito com status Pendente
- Valor e descrição são obtidos automaticamente do produto
- Evita inconsistências entre valor do produto e valor da cobrança
4.2. POST /api/extrato/registrar-pagamento
Registrar Pagamento (Crédito)
- Descrição: Registra um crédito (-) no extrato do usuário para pagamentos gerais
- Método: POST
- Autenticação: Requerida (JWT Bearer Token)
- Body: Objeto RegistrarPagamentoRequest
- Resposta: Objeto Extrato do pagamento criado (201 Created)
- Validações:
- UserId é obrigatório
- Valor deve ser maior que zero
- Descrição é obrigatória
- Uso: Confirmação de pagamentos recebidos, pagamentos gerais
- Importante:
- Cria movimentação tipo Crédito com status Pago
- ProdutoId é automaticamente definido como NULL (pagamentos gerais)
- Não requer vínculo com produto específico
- Processado automaticamente como true
4.3. GET /api/extrato/usuario/{uuid}
Obter Extrato Completo do Usuário
- Descrição: Retorna todo o histórico financeiro de um usuário
- Método: GET
- Autenticação: Requerida (JWT Bearer Token)
- Parâmetros:
uuid (path): UUID do usuário
- Resposta: Array de objetos Extrato ordenado por data
- Uso: Histórico completo, análise de movimentações
4.4. GET /api/extrato/usuario/{uuid}/periodo
Obter Extrato por Período
- Descrição: Retorna extrato filtrado por período de datas
- Método: GET
- Autenticação: Requerida (JWT Bearer Token)
- Parâmetros:
uuid (path): UUID do usuário
dataInicio (query): Data inicial (formato: YYYY-MM-DD)
dataFim (query): Data final (formato: YYYY-MM-DD)
- Resposta: Array de objetos Extrato do período
- Uso: Relatórios mensais, análise de períodos específicos
4.5. GET /api/extrato/usuario/{uuid}/saldo
Calcular Saldo do Usuário
- Descrição: Calcula e retorna o saldo atual do usuário (Pagamentos - Cobranças)
- Método: GET
- Autenticação: Requerida (JWT Bearer Token)
- Parâmetros:
uuid (path): UUID do usuário
- Resposta: Objeto com saldo calculado
- Cálculo:
Saldo = Total Pagamentos - Total Cobranças
- Uso: Verificação rápida de saldo, dashboards
- Tratamento:
- Usuários sem movimentações retornam saldo 0
- Tratamento robusto de valores NULL
- Prevenção de erros de conversão
🧾 5. FATURA - Consolidação de Movimentações
5.1. GET /api/fatura/{uuid}
Gerar Fatura do Mês Atual
- Descrição: Gera fatura consolidada do mês/ano atual
- Método: GET
- Autenticação: Requerida (JWT Bearer Token)
- Parâmetros:
uuid (path): UUID do usuário
- Resposta: Objeto FaturaResponse com resumo completo
- Uso: Visualização de fatura atual do usuário
5.2. GET /api/fatura/{uuid}/{mes}/{ano}
Gerar Fatura de Período Específico
- Descrição: Gera fatura consolidada de um mês/ano específico
- Método: GET
- Autenticação: Requerida (JWT Bearer Token)
- Parâmetros:
uuid (path): UUID do usuário
mes (path): Mês (1-12)
ano (path): Ano (ex: 2025)
- Resposta: Objeto FaturaResponse com:
- Lista de cobranças (débitos)
- Lista de pagamentos (créditos)
- Resumo: total cobranças, total pagamentos, saldo
- Cálculo do Saldo:
Saldo = Total Cobranças - Total Pagamentos
- Uso: Histórico de faturas, consulta de períodos anteriores
🔧 Modelos de Dados
Estrutura: Produto
{
"id": 1,
"nome": "Mensalidade Premium",
"descricao": "Mensalidade mensal com benefícios extras",
"valor": 150.00,
"ativo": true,
"dataCriacao": "2025-10-01T10:00:00",
"dataAtualizacao": "2025-10-01T10:00:00"
}
Estrutura: Cobrança
{
"id": 1,
"descricao": "Conta Principal - PIX",
"tipoConta": 0,
"tipoPessoa": 0,
"ordemPgto": 1,
"tipoChavePix": 0,
"chavePix": "123.456.789-00",
"banco": "001",
"agencia": "1234",
"conta": "12345-6",
"regraPagamento": "Pagamento até dia 10",
"ativo": true,
"dataCriacao": "2025-10-01T10:00:00",
"dataAtualizacao": "2025-10-01T10:00:00"
}
Estrutura: Extrato
{
"id": 1,
"uuid_Usuario": "abc-123-def-456",
"idProduto": 1,
"nomeProduto": "Mensalidade Premium",
"idCobranca": 1,
"descricaoCobranca": "Conta Principal - PIX",
"tipoMovimento": 0,
"tipoMovimentoTexto": "Debito",
"valor": 150.00,
"descricao": "Mensalidade Outubro/2025",
"dataReferencia": "2025-10-01",
"dataMovimento": "2025-10-01T10:00:00",
"status": 0,
"statusTexto": "Pendente",
"idPagamentoRelacionado": null,
"observacao": null
}
Estrutura: Fatura
{
"uuidUsuario": "abc-123-def-456",
"mesReferencia": 10,
"anoReferencia": 2025,
"dataGeracao": "2025-10-07T10:30:00",
"cobrancas": [
{
"id": 1,
"produto": "Mensalidade Premium",
"valor": 150.00,
"data": "2025-10-01",
"status": "Pendente",
"descricao": "Mensalidade Outubro/2025"
}
],
"pagamentos": [
{
"id": 2,
"produto": "Mensalidade Premium",
"valor": 150.00,
"data": "2025-10-05",
"status": "Pago",
"descricao": "Pagamento via PIX"
}
],
"resumo": {
"totalCobrancas": 150.00,
"totalPagamentos": 150.00,
"saldo": 0.00
}
}
📈 Enums do Sistema
TipoConta
0 = Corrente - Conta Corrente
1 = Poupanca - Conta Poupança
2 = Salario - Conta Salário
3 = Investimento - Conta de Investimento
4 = Outro - Outro tipo de conta
TipoPessoa
0 = Fisica - Pessoa Física
1 = Juridica - Pessoa Jurídica
TipoChavePix
0 = CPF
1 = CNPJ
2 = Email
3 = Telefone
4 = Aleatoria
TipoMovimento
0 = Debito - Cobrança (+) aumenta saldo devedor
1 = Credito - Pagamento (-) diminui saldo devedor
StatusMovimento
0 = Pendente - Aguardando pagamento
1 = Pago - Quitado
2 = Cancelado - Cancelado
🔐 Autenticação e Autorização
⚠️ IMPORTANTE: Todos os endpoints do sistema financeiro requerem autenticação JWT:
- JWT Bearer Token obrigatório no header
Authorization: Bearer {token}
- Segurança implementada em todos os controllers:
[Authorize(AuthenticationSchemes = "Bearer")]
- ProdutosController
- CobrancasController
- ProdutoCobrancaController
- ExtratoController
- FaturaController
- Permissões específicas baseadas no tipo de usuário:
- Administradores: Acesso completo a todos os endpoints
- Gestores Financeiros: Gestão de produtos, cobranças e vínculos
- Usuários: Consulta apenas do próprio extrato e fatura
- Rate Limiting: Proteção contra abuso com limite de requisições
🔄 Fluxo Completo do Sistema Financeiro
📋 FASE 1: Configuração Inicial
Passo 1.1: Criar Produtos
POST /api/produtos
Content-Type: application/json
Authorization: Bearer {token}
{
"nome": "Mensalidade Quadra",
"descricao": "Mensalidade mensal uso da quadra",
"valor": 100.00,
"ativo": true
}
→ Resposta: Produto ID 1 criado
Passo 1.2: Criar Cobranças (Contas Destino)
POST /api/cobrancas
Content-Type: application/json
Authorization: Bearer {token}
{
"descricao": "Conta PIX Principal",
"tipoConta": 0,
"tipoChavePix": 0,
"chavePix": "123.456.789-00",
"banco": "001",
"agencia": "1234",
"conta": "12345-6",
"ativo": true
}
→ Resposta: Cobrança ID 1 criada
Passo 1.3: Vincular Produto à Cobrança
POST /api/produto-cobranca
Content-Type: application/json
Authorization: Bearer {token}
{
"idProduto": 1,
"idCobranca": 1
}
→ Resposta: Vínculo criado com sucesso
→ AGORA o Produto 1 pode gerar cobranças para Cobrança 1
💰 FASE 2: Geração de Cobranças
Passo 2.1: Gerar Cobrança Mensal para Usuário
POST /api/extrato/gerar-cobranca
Content-Type: application/json
Authorization: Bearer {token}
{
"userId": "user-abc-123",
"produtoCobrancaId": 13,
"referencia": "Mensalidade Outubro/2025",
"dataVencimento": "2025-10-31"
}
→ Sistema valida:
✓ Vínculo produto-cobrança existe e está ativo
✓ Produto vinculado existe e está ativo
✓ Cobrança vinculada existe e está ativa
✓ UserId é válido
→ Sistema obtém automaticamente:
✓ Valor: 100.00 (do produto)
✓ Descrição: "Cobrança - Mensalidade Quadra" (gerada automaticamente)
→ Cria no Extrato:
- Tipo: Débito (+)
- Valor: +100.00 (automático)
- Descrição: "Cobrança - Mensalidade Quadra" (automática)
- Status: Pendente
→ SALDO DO USUÁRIO: +100.00 (devedor)
✅ FASE 3: Registro de Pagamentos
Passo 3.1: Usuário Realiza Pagamento
POST /api/extrato/registrar-pagamento
Content-Type: application/json
Authorization: Bearer {token}
{
"userId": "user-abc-123",
"valor": 100.00,
"descricao": "Pagamento via PIX",
"referencia": "PIX_20251005_001"
}
→ Sistema valida:
✓ UserId é válido
✓ Valor > 0
✓ Descrição fornecida
→ Cria no Extrato:
- Tipo: Crédito (-)
- Valor: -100.00
- Status: Pago
- ProdutoId: NULL (pagamento geral)
- Processado: true (automático)
→ SALDO DO USUÁRIO: +100 -100 = 0.00 (quitado)
🧾 FASE 4: Consulta de Extrato e Fatura
Passo 4.1: Consultar Extrato Completo
GET /api/extrato/usuario/user-abc-123
Authorization: Bearer {token}
→ Retorna:
[
{
"id": 1,
"tipoMovimento": 0,
"tipoMovimentoTexto": "Debito",
"valor": 100.00,
"status": 1,
"statusTexto": "Pago",
"dataMovimento": "2025-10-01T10:00:00"
},
{
"id": 2,
"tipoMovimento": 1,
"tipoMovimentoTexto": "Credito",
"valor": 100.00,
"status": 1,
"statusTexto": "Pago",
"idPagamentoRelacionado": 1,
"dataMovimento": "2025-10-05T14:30:00"
}
]
Passo 4.2: Consultar Saldo do Usuário
GET /api/extrato/usuario/user-abc-123/saldo
Authorization: Bearer {token}
→ Retorna:
{
"status": true,
"message": "Saldo calculado com sucesso",
"data": 0.00
}
→ Cálculo automático:
Total Cobranças: 100.00
Total Pagamentos: 100.00
Saldo: 100.00 - 100.00 = 0.00
Passo 4.3: Gerar Fatura Mensal
GET /api/fatura/user-abc-123/10/2025
Authorization: Bearer {token}
→ Retorna:
{
"uuidUsuario": "user-abc-123",
"mesReferencia": 10,
"anoReferencia": 2025,
"dataGeracao": "2025-10-07T10:30:00",
"cobrancas": [
{
"id": 1,
"produto": "Mensalidade Quadra",
"valor": 100.00,
"data": "2025-10-01",
"status": "Pago"
}
],
"pagamentos": [
{
"id": 2,
"produto": "Mensalidade Quadra",
"valor": 100.00,
"data": "2025-10-05",
"status": "Pago"
}
],
"resumo": {
"totalCobrancas": 100.00,
"totalPagamentos": 100.00,
"saldo": 0.00 ← QUITADO!
}
}
📊 Casos de Uso Avançados
Caso 1: Múltiplos Produtos para Mesmo Usuário
// Gerar cobrança de Mensalidade
POST /api/extrato/gerar-cobranca
{
"userId": "user-123",
"produtoCobrancaId": 21, // ID do vínculo (Mensalidade → Conta PIX)
"referencia": "Mensalidade Outubro/2025"
// Valor e descrição automáticos do produto
}
// Gerar cobrança de Aluguel Churrasqueira
POST /api/extrato/gerar-cobranca
{
"userId": "user-123",
"produtoCobrancaId": 22, // ID do vínculo (Churrasqueira → Conta PIX)
"referencia": "Aluguel Churrasqueira Outubro/2025"
// Valor e descrição automáticos do produto
}
→ Fatura do mês:
Total Cobranças: 150.00
(100.00 + 50.00)
Caso 2: Pagamento Parcial
// Cobrança de 100.00 (automática do produto)
POST /api/extrato/gerar-cobranca
{
"userId": "user-123",
"produtoCobrancaId": 21
// Valor automático: 100.00
}
// Pagamento parcial de 50.00
POST /api/extrato/registrar-pagamento
{
"userId": "user-123",
"valor": 50.00,
"descricao": "Pagamento parcial via PIX"
}
→ Saldo: 100.00 - 50.00 = 50.00 (ainda devedor)
Caso 3: Produto com Múltiplas Cobranças
// Vincular Produto a múltiplas contas
POST /api/produto-cobranca
{ "idProduto": 1, "idCobranca": 1 }
POST /api/produto-cobranca
{ "idProduto": 1, "idCobranca": 2 }
// Ao gerar cobrança, escolher qual conta recebe
POST /api/extrato/gerar-cobranca
{
"userId": "user-123",
"produtoCobrancaId": 21, // Escolha o ID do vínculo desejado
"referencia": "Mensalidade Outubro/2025"
// Valor e descrição automáticos do produto
}
⚠️ Validações e Regras de Negócio
Validações de Produto
- Nome: Obrigatório, máximo 200 caracteres
- Valor: Obrigatório, deve ser maior que 0.01
- Descrição: Opcional, sem limite
Validações de Cobrança
- Descrição: Obrigatória, máximo 200 caracteres
- Chave PIX: Formato válido conforme tipo escolhido
- Dados Bancários: Opcionais mas validados se fornecidos
Regras de Vínculo
- Produto e Cobrança devem existir
- Produto e Cobrança devem estar ativos
- Não permitir vínculos duplicados
- Soft delete: desativar ao invés de excluir
Regras de Cobrança
- Obrigatório informar
produtoCobrancaId (vínculo ativo)
- Produto vinculado deve existir e estar ativo
- Cobrança vinculada deve existir e estar ativa
- UserId é obrigatório
- Valor e descrição são obtidos automaticamente do produto
- Status inicial: Pendente
- Tipo: Débito
- Evita inconsistências entre valor do produto e valor da cobrança
Regras de Pagamento
- UserId é obrigatório
- Valor deve ser maior que zero
- Descrição é obrigatória
- ProdutoId é automaticamente definido como NULL (pagamentos gerais)
- Status automático: Pago
- Tipo: Crédito
- Processado automaticamente como true
- Não requer vínculo com produto específico
Regras de Cálculo de Saldo
Fórmula: Saldo = Σ(Débitos) - Σ(Créditos)
Exemplo 1 (Quitado):
Débito: +100.00
Crédito: -100.00
Saldo: 0.00
Exemplo 2 (Devedor):
Débito: +100.00
Crédito: -50.00
Saldo: +50.00
Exemplo 3 (Credor - pagou a mais):
Débito: +100.00
Crédito: -150.00
Saldo: -50.00 (usuário tem crédito)
🚨 Tratamento de Erros
Códigos de Status HTTP
- 200: OK - Operação bem-sucedida
- 201: Created - Recurso criado com sucesso
- 400: Bad Request - Dados inválidos ou regra de negócio violada
- 401: Unauthorized - Token ausente ou inválido
- 403: Forbidden - Sem permissão para esta operação
- 404: Not Found - Recurso não encontrado
- 409: Conflict - Conflito (ex: vínculo duplicado)
- 500: Internal Server Error - Erro no servidor
Formato de Resposta de Erro
{
"message": "Produto não encontrado ou inativo",
"status": false
}
Exemplos de Erros Comuns
Erro: Produto não vinculado à cobrança
POST /api/extrato/gerar-cobranca
{
"userId": "user-123",
"produtoCobrancaId": 999, // ID inexistente ou desvinculado
...
}
→ 400 Bad Request
{
"message": "Vínculo produto-cobrança com ID 999 não encontrado ou inativo."
}
Erro: Produto inativo
POST /api/extrato/gerar-cobranca
{
"userId": "user-123",
"produtoCobrancaId": 21, // Produto vinculado está inativo
...
}
→ 400 Bad Request
{
"message": "Produto 'Mensalidade Premium' está inativo e não pode ser cobrado."
}
Erro: Vínculo duplicado
POST /api/produto-cobranca
{
"idProduto": 1,
"idCobranca": 1
}
→ 400 Bad Request
{
"message": "Este vínculo já existe"
}
Erro: UserId obrigatório
POST /api/extrato/gerar-cobranca
{
"produtoCobrancaId": 21
// UserId ausente
}
→ 400 Bad Request
{
"errors": {
"UserId": ["O ID do usuário é obrigatório."]
}
}
Erro: Token JWT ausente
GET /api/extrato/usuario/user-123/saldo
// Sem header Authorization
→ 401 Unauthorized
{
"message": "Token de autenticação ausente ou inválido"
}
📈 Performance e Limitações
Limitações
- Paginação: Listas retornam até 1000 registros (extrato pode crescer)
- Rate Limiting: 1000 requests por hora por usuário
- Timeout: 30 segundos por requisição
- Tamanho Máximo: 1MB por request body
Otimizações Implementadas
- Índices de Banco: 12 índices para queries rápidas
- Operações Assíncronas: Todas operações são async/await
- Include: Carregamento otimizado de relacionamentos
- Soft Delete: Preserva histórico sem sobrecarga
🔄 Integração com Outros Módulos
Módulos Relacionados
- Usuários: UUID do usuário para todas movimentações
- Notificações: Avisos de cobranças e pagamentos (futuro)
- Relatórios: Dados para análises financeiras
- Gateway de Pagamento: Integração Stripe/PIX (futuro)
🛠️ Manutenção e Monitoramento
Logs Importantes
- Criação de produtos e cobranças
- Geração de débitos
- Registro de pagamentos
- Erros de validação
- Tentativas de acesso não autorizado
Métricas Monitoradas
- Total de produtos ativos
- Total de cobranças ativas
- Quantidade de débitos pendentes
- Taxa de quitação mensal
- Valor total de cobranças geradas
- Valor total de pagamentos recebidos
- Tempo médio de resposta por endpoint
🔧 Correções e Melhorias Implementadas
✅ Segurança
- Autenticação JWT: Todos os endpoints agora requerem token Bearer
- Rate Limiting: Proteção contra abuso implementada
- Validação de Permissões: Controle de acesso baseado em roles
✅ Geração Automática de Cobrança
- Valor Automático: Obtido diretamente do produto cadastrado
- Descrição Automática: Gerada no formato "Cobrança - {NomeProduto}"
- Validação de Produto: Verifica se produto existe e está ativo
- Consistência: Evita inconsistências entre valor do produto e cobrança
✅ Registro de Pagamentos
- ProdutoId Nullable: Pagamentos gerais não requerem produto específico
- Processamento Automático: Status "Pago" e "Processado" automáticos
- Flexibilidade: Suporte a pagamentos parciais e gerais
✅ Cálculo de Saldo
- Endpoint Dedicado: GET /api/extrato/usuario/{uuid}/saldo
- Tratamento Robusto: Prevenção de erros de conversão NULL
- Coleções Vazias: Usuários sem movimentações retornam saldo 0
- Fórmula Correta: Saldo = Total Pagamentos - Total Cobranças
✅ Entity Framework
- ProdutoId Nullable: Configuração correta no banco de dados
- Relacionamentos Opcionais: Suporte a pagamentos sem produto
- Mapeamento Correto: Enums configurados como tinyint
✅ API Simplificada
- Endpoint Unificado: POST /api/produto-cobranca (removido /vincular)
- Campos Automáticos: Menos campos obrigatórios no request
- Validações Inteligentes: Verificações automáticas de consistência
📚 Resumo Executivo
🎯 O Sistema em 5 Passos
- CONFIGURAR: Criar produtos, cobranças e vínculos
- COBRAR: Gerar débitos para usuários
- PAGAR: Registrar créditos (pagamentos)
- CONSULTAR: Visualizar extrato e saldo
- ANALISAR: Gerar faturas consolidadas
📊 Conceitos-Chave
- Débito (+): Cobrança gerada, aumenta saldo devedor
- Crédito (-): Pagamento registrado, diminui saldo devedor
- Saldo: Débitos - Créditos
- Vínculo: Relacionamento N:N entre produto e cobrança
- Soft Delete: Inativação ao invés de exclusão física
✅ Checklist de Uso
□ Criar pelo menos 1 produto
□ Criar pelo menos 1 cobrança (conta destino)
□ Vincular produto à cobrança
□ Gerar cobrança (débito) para usuário
□ Registrar pagamento (crédito) do usuário
□ Consultar extrato/fatura do usuário
Versão: 1.0
Última Atualização: Outubro de 2025
Responsável: Equipe de Desenvolvimento CordenaAi